import BaseFindApi from '@/api/baseFindApi';
import {ID} from '@/api/http';

/**
 * 基础api
 * @param <R> 对象类型
 */
abstract class BaseApi<R> extends BaseFindApi<R> {
  /**
   * 保存
   * @param data 对象
   * @return 对象
   */
  public save(data: R): Promise<R> {
    return super.post0(this.getBase(), data);
  }

  /**
   * 更新
   * @param data 对象
   * @return 对象
   */
  public update(data: R | any): Promise<R> {
    const id = data[this.getIdFieldName()];
    return super.put0(`${this.getBase()}/${id}`, data);
  }

  /**
   * 删除
   * @param id 主键ID
   * @param force 强制删除标志，默认false
   * @return 响应
   */
  public delete(id: ID, force: boolean = false): Promise<void> {
    return super.delete0(`${this.getBase()}/${id}`, {
      params: {
        force
      }
    });
  }

  /**
   * 获取主键ID名称
   * @return 主键ID名称
   */
  protected abstract getIdFieldName(): string;
}

export default BaseApi;
